import request from '../axios.config';

/**
 * 菜单原始项
 */
export interface SysMenuRaw {
  /**
   * 菜单id
   */
  menuId?: string;
  /**
   * 鉴权api地址
   */
  api?: null | string;
  /**
   * 菜单名称
   */
  code: string;
  /**
   * 是否启用；
   */
  enabled: boolean;
  /**
   * 是否隐藏；
   */
  hidden: boolean;
  /**
   * 菜单图标
   */
  icon: string;
  /**
   * 是否缓存：0.否；1.是
   */
  keepalive: boolean;
  /**
   * 父级菜单ID
   */
  pid: string;
  /**
   * 菜单位置：1.首页侧边栏2.档案模块3.两者都有
   */
  position: 1 | 2 | 3;
  /**
   * 排序
   */
  sort: number;
  /**
   * 打开方式：_blank，
   */
  target: '_blank' | '_self';
  /**
   * 菜单标题
   */
  title: string;
  /**
   * 类型：1.目录；2.页面；3.外链
   */
  type: 1 | 2 | 3;
  /**
   * 地址
   */
  url: string;
  /**
   * 重定向地址
   */
  redirect: string;
}

export interface SysMenuItem extends SysMenuRaw {
  /**
   * 菜单ID
   */
  menuId: string;
  children?: SysMenuItem[];
}

// export interface SysMenuPage {

// }

export interface SysMenuPageQuery {
  /**
   * 菜单标题
   */
  title?: string;
  /**
   * 菜单名称
   */
  code?: number | null;
  codeEnd?: number | null;
  /**
   * 类型：1.目录；2.页面；3.外链
   */
  type?: null | 1 | 2 | 3;
}

/**
 * 系统菜单api
 */
export const useSysMenuApi = {
  /**
   * 添加
   * @param data
   * @returns
   */
  add: (data: SysMenuRaw) => {
    return request({
      url: '/api/system/menu',
      method: 'POST',
      data,
    });
  },
  /**
   * ID 查询
   * @param id
   * @returns
   */
  get: (id: string): Promise<RequestResponse<SysMenuItem>> => {
    return request({
      url: '/api/system/menu/' + id,
      method: 'GET',
    });
  },
  /**
   * 更新
   * @param data
   * @returns
   */
  update: (data: SysMenuItem) => {
    return request({
      url: '/api/system/menu',
      method: 'PUT',
      data,
    });
  },
  /**
   * 删除
   * @param id
   * @returns
   */
  delete: (id: string) => {
    return request({
      url: '/api/system/menu/' + id,
      method: 'DELETE',
    });
  },
  /**
   * 列表
   * @param query
   * @returns
   */
  list: (query?: SysMenuPageQuery): Promise<RequestResponse<SysMenuItem[]>> => {
    return request({
      url: '/api/system/menu/list',
      method: 'get',
      params: query,
    });
  },
  /**
   * 分页
   * @param query
   * @returns
   */
  page: (query?: SysMenuPageQuery) => {
    return request({
      url: '/api/system/menu/page',
      method: 'get',
      params: query,
    });
  },
  /**
   * 菜单树
   * @param query
   * @returns
   */
  tree: (query?: SysMenuPageQuery): Promise<RequestResponse<SysMenuItem[]>> => {
    return request({
      url: '/api/system/menu/tree',
      method: 'get',
      params: query,
    });
  },
};
